const fp = require('./package/fp')
const cars = [{name: 'Ferrari FF', horsepower: 660, dollar_value: 700000, in_stock: true},
    {name: 'Spyker c12 zagato', horsepower: 650, dollar_value: 648000, in_stock: false},
    {name: 'Jaguar XKR-S', horsepower: 550, dollar_value: 132000, in_stock: false},
    {name: 'Audi R8', horsepower: 525, dollar_value: 114200, in_stock: false},
    {name: 'Aston Martin one-77 ', horsepower: 750, dollar_value: 1850000, in_stock: true},
    {name: 'Pagani Huayra ', horsepower: 700, dollar_value: 1300000, in_stock: false},
]
//练习1:使用函数组合fp.flowRight()重新实现下面这个函数
// let isListInstock = function (cars) {
//     let last_cat = fp.last(cars)
//     return fp.prop('in_stock',last_cat)
// }
// console.log(isListInstock(cars))
let last_cat = array => fp.last(array)
let prop1 = array => fp.prop('in_stock', array)
const f1 = fp.flowRight(prop1, last_cat)
console.log(f1(cars))


//练习2:使用fp.flowRight()、fp.prop()和 fp.first()获取第一个car的 name
let first_cat = array => fp.first(array)
let prop2 = array => fp.prop('in_stock', array)
const f2 = fp.flowRight(prop2, first_cat)
console.log(f2(cars))


//练习3:使用帮助函数_average重构averageDollarValue，使用函数组合的方式实现
let _average = function (xs) {
    return fp.reduce(fp.add, 0, xs) / xs.length
}
// let averageDollarValue = function (cars) {
//     let dollar_values = fp.map(function (car) {
//         return car.dollar_value
//     },cars)
//     return _average(dollar_values)
// }
// console.log(averageDollarValue(cars))
let map3 = array => fp.map(car => {
    return car.dollar_value
}, array)
const f3 = fp.flowRight(_average, map3)
console.log(f3(cars))


//练习4:使用flowRight 写一个sanitizeNames()函数，返回一个下划线连接的小写字符串，把数组中的name 转换为这种形式:例如:sanitizeNames(["Hello World"]) =>["hello_world"]
let _underscore = fp.replace(/\W+/g, '_')
let tolower = fp.map(fp.toLower)
let map4 = arrs => fp.map(arr => {
    return arr.name
}, arrs)
const sanitizeNames = fp.flowRight(_underscore, tolower, map4)
console.log(sanitizeNames(cars))